<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonModule for the canonical source repository
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

namespace Cargadatos\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Cargadatos\Model\Dao\CargadatosDao;
use Zend\Session\Container;
use Zend\Json\Decoder as Decodificador;
use Guardadatos\Model\Entity\Captura;
use Guardadatos\Model\Dao\CapturaDao;
use Zend\Json;

class IndexController extends AbstractActionController
{
    protected $_datos;
    protected $_session;
    protected $config;
    protected $_capturaDao;
    protected $_cargaDao;
    //protected $_ruta = "C:\\Users\\Programador B\\Documents\\ArchivosCapturaTxt\\Captura_PROV_D1_rcs_cdf.txt";
    
    public function __construct()
    {
        //$ruta = "C:\\Users\\Programador B\\Documents\\ArchivosCapturaTxt\\Captura_PROV_D1_rcs_cdf.txt";
        //$this->setDatos(new CargadatosDao($ruta));
        //$this->_datos->generaCadenaJson();
    }
    
    public function getConfig()
    {
        if(!$this->config)
        {
            $sm = $this->getServiceLocator();
            $this->config = $sm->get('ConfigIni');
        }
        
        return $this->config;
    }
    
    /*public function setCapturaDao($capturaDao)
    {
        $this->_capturaDao = $capturaDao;
    }*/
    
    public function getCargaDao()
    {
        if(!$this->_cargaDao)
        {
            $sm = $this->getServiceLocator();
            $this->_cargaDao = $sm->get('CargaDao');
        }
        return $this->_cargaDao;
    }
    
    public function getCapturaDao()
    {
        if(!$this->_capturaDao)
        {
            $sm = $this->getServiceLocator();
            $this->_capturaDao = $sm->get('Guarda\Model\CapturaDao');
        }
        
        return $this->_capturaDao;
    }
    
    public function getDatos() {
        return $this->_datos;
    }

    public function setDatos($datos) {
        $this->_datos = $datos;
    }
    
    public function indexAction()
    {
        /*$this->_session = new Container('datosSession');
        $this->_session->getManager()->destroy();
        exit;*/
        $this->getConfig();
        $titulo = $this->config['parametros']['mvc']['Capturas']['Cargadatos']['titulo'];
        $v1 = new ViewModel(array('titulo' => $titulo,
                                  'baseUrl' => $this->getRequest()->getBaseUrl()));
        $v1->setTerminal(true);
        
        return $v1;
    }
    
    public function listarAction()
    {
        $v1 = new ViewModel();   
        $v1->setTerminal(true);
        $this->_session = new Container('datosSession');
        //MANDO LLAMAR AL METODO PARA GENERAR LA CADENA JSON
        if(!isset($this->_session->bandera))
        {
            //$this->getCargaDao()->setRutaArchivo($this->_ruta);
            //$this->getCargaDao()->construye();
            //$this->_datos->generaCadenaJson();
            $this->getCargaDao()->generaCadenaJson();
            echo $this->getCargaDao()->getCadenaJson();
            return $v1;
            //echo $cadenaJson;
        }
        else
        {
            //var_dump($this->getCargaDao()->getCadenaJson());
            //exit;
            //echo $this->getDatos();
            echo $this->_session->datoJson;
            return $v1;
        }
               
        //TRAIGO LA CADENA JSON PARA MANDARLA A IMPRIMIR
        //$cadenaJson = $this->_datos->getCadenaJson();
        //echo $cadenaJson;
        
        
    }
    
    public function obtenAction()
    {
        $this->_session = new Container('datosSession');
        $this->_session->dats = $_POST['cadena'];
        return $this->redirect()->toUrl('guardar');
        //return $this->forward()->dispatch('Cargadatos\Controller\Index', array('action' => 'guardar'));
    }

    public function guardarAction()
    {
        $articulo = "";
        $valorCapturado = "";
        $campo = "";
        $valorAnterior = "";
        $ban1 = 0;
        $valores = array("estrategico","rango","eca","vec","ms","upv","observaciones");
        $this->_session = new Container('datosSession');
        $arreglo = $this->_session->dats;
      
        $ds = Decodificador::decode($arreglo, 1);
        
        //CREAMOS POR PRIMERA VEZ EL OBJETO
        $captura = new Captura();
        
        //AQUI VAMOS A CARGAR CADA UNO DE LOS OBJETOS PARA IRLOS GUARDANDO
        //EN LA BASE DE DATOS
        foreach($ds as $value)
        {
            foreach($value as $key => $value2)
            {
                $llave = htmlspecialchars($key, ENT_QUOTES);
                //ASIGNACION DE LOS DATOS A LOS OBJETOS
                if($llave == "articulo")
                    $articulo = $value2;
                else
                {
                    foreach($valores as $vals)
                    {
                        if($llave == $vals)
                        {
                            $valorCapturado = $value2;
                            $campo = $llave;    
                            $ban1++;
                        }
                      
                        if($llave == $vals."_ant")
                        {
                           $valorAnterior = $value2;
                           $ban1++;
                        }
                   }
               }
               
               if(($ban1 % 2) == 0 && $ban1 != 0)
               {
                   $captura->setArticulo($articulo);
                   $captura->setValorCapturado($valorCapturado);
                   $captura->setCampo($campo);
                   $captura->setValorAnterior($valorAnterior);
                   //INSERTAMOS EL OBJETO EN LA BASE DE DATOS
                   $this->getCapturaDao()->guardar($captura);
                   //ELIMINAMOS EL OBJETO
                   unset($captura);
                   //Creamos otro objeto captura
                   $captura = new Captura();
              }
              
          }
          
          //Inicializamos los valores
          $ban1 = 0;
          unset($captura);
          $captura = new Captura();
       
          
       }
        //return new ViewModel(array('key' => $llave,
        //                           "valor" => $valorCapturado));
    }
    
    public function datosAction()
    {
        $this->_session = new Container('datosSession');
        $this->_session->busqueda = $_POST['buscar'];
        $this->_session->dato = $_POST['dato'];
        $this->_session->bandera = $_POST['bandera'];
        
        return $this->redirect()->toUrl('busqueda');
        //return $this->forward()->dispatch('Cargadatos\Controller\Index', array('action' => 'busqueda'));
    }
    
    public function busquedaAction()
    {
        //Obteniendo el objeto del tipo CargadatosDao para 
        //hacer uso de los metodos buscaPorArticulo
        //buscarPorDescripcion y buscarPorGrupoProveedor
        //$datos = $this->getDatos();
        $this->_session = new Container('datosSession');
        $buscarPor = $this->_session->busqueda;
        $datoBuscar = $this->_session->dato;
        
        
        if($buscarPor == "id_num_art")
            $this->getCargaDao()->buscarPorArticulo($datoBuscar);
        else
            $this->getCargaDao()->busquedaGeneral($datoBuscar);
                                  
        if(isset($this->_session->datoJson))
                    $this->_session->datoJson = "";
        
        $this->_session->datoJson = $this->getCargaDao()->getCadenaJson();
              
    }

    public function fooAction()
    {
        // This shows the :controller and :action parameters in default route
        // are working when you browse to /module-specific-root/skeleton/foo
        return array();
    }
}
